package co.edu.uniandes.ecos.itera.tsp.interfaz;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import co.edu.uniandes.ecos.itera.tsp.anotaciones.Loc;
import co.edu.uniandes.ecos.itera.tsp.anotaciones.LogT;
import co.edu.uniandes.ecos.itera.tsp.mundo.DelegadoNegocio;
import co.edu.uniandes.ecos.itera.tsp.mundo.Interrupcion;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;

/**
 * Panel para ofrecer funcionalidad del manejo de Interrupciones
 */
public class ManejarInterrupciones extends JPanel implements ActionListener
{
	/**
	 * Titulo Principal "Manejador Interrupciones"
	 */
//	private JLabel labTitulo;
	/**
	 * Titulo que indica el codigo de la interrupcion deseada
	 */
	private JLabel labCodInt;
	/**
	 * Se optiene elcodigo de la interrupcion deseada
	 */
	private JTextField txtCodInterrupcion;
	/**
	 * Titulo que indica la descripcion de la interrupcion
	 */
	private JLabel labDescipInt;
	/**
	 * se optiene la descripcion de la iNterrupcion
	 */
	private JTextField txtDescrpInt;
	/**
	 * Boton de Guardar o Almacenar la Informacion de la Interrupcion
	 */
	private JButton butGuardar;
	
	/**
	 * Referencia al objeto que permite trabajar las transacciones de negocio
	 */
	private DelegadoNegocio accesoAMundo;
	
	/**
	 * Interrupcion que se esta trabajando en estos momentos en esta pantalla
	 */
	private Interrupcion interrupcionTrabajandose;
	
	/**
	 * Referencia al objeto contenedor. Este es el objeto
	 * que maneja la pantalla principal, o sea el admon de proyectos
	 */
	private MenuPrincipal referenciaAContenedor;
	
	/**
	 * Determina como unico a este objeto
	 */
	private static final long serialVersionUID = 1L;
	private static final String GUARDAR="guardar";
	
	/**
	 * Consutrctor por defecto
	 * @param mundo Referencia al objeto que permite trabajar las transacciones de negocio
	 */
	@LogT(date = "2011-03-20", min = 5, taskId = 80)
//	@Loc(size = 4, taskId = 80)
	
	public ManejarInterrupciones(DelegadoNegocio mundo, MenuPrincipal contenedor)
	{
		this.accesoAMundo = mundo;
		this.referenciaAContenedor = contenedor;
		this.interrupcionTrabajandose = null;
		this.pintarse();
	}
	
	/**
	 * Se encarga de pintar los elementos de la pantalla 12:55
	 */
	@LogT(date = "2011-03-20", min = 26, taskId = 80)
	@Loc(size = 17, taskId = 80)
	private void pintarse()
	{
		// Asociacion de un distribuidor grafico y de las dimensiones
		setLayout(new GridLayout(4, 1));
		setPreferredSize(new Dimension(400, 200));
		
		//Definicion del borde
		TitledBorder border = BorderFactory.createTitledBorder("Manejador de Interrupcciones");
		border.setTitleColor(Color.BLUE);
		setBorder(border);
		
		// Etiqueta y Zona de Texto con la informacion de la interrupcion
		labCodInt = new JLabel("Codigo de la Interrupcio ");
		txtCodInterrupcion = new JTextField();
		labDescipInt = new JLabel("Descripcion Interrupccion");
		txtDescrpInt = new JTextField();
		
		//Boton "Guardar"
		butGuardar = new JButton("Guardar");
		butGuardar.setActionCommand(GUARDAR);
		butGuardar.addActionListener(this);
		
		//Adicionar todos los componentes graficos al panel
		add(labCodInt);
		add(txtCodInterrupcion);
		add(labDescipInt);
		add(txtDescrpInt);
		add(butGuardar);	
	}
	
	/**
	 * Se encarga de cargar El defecto en pantalla para
	 * poderlo manejar por el usuario
	 * @param defectoACargar Informacion del defecto que se desea actualizar
	 */
	@LogT(date = "2011-03-20", min = 7, taskId = 80)
	@Loc(size = 3, taskId = 80)
	public void cargarEntidad(Interrupcion interrupcionACargar)
	{
		this.interrupcionTrabajandose = interrupcionACargar;
		
		this.txtCodInterrupcion.setText(""+this.interrupcionTrabajandose.getIntId());
		this.txtDescrpInt.setText(this.interrupcionTrabajandose.getDescription());
	}
	
	/**
	 * Almacena el Interrupcion, ya sea creado o modificado
	 */
	@LogT(date = "2011-03-20", min = 46, taskId = 80)
	@Loc(size = 22, taskId = 80)
	public void almacenar()
	{
		if (txtCodInterrupcion.getText().trim().length()==0 || txtDescrpInt.getText().trim().length()==0) 
		{
			JOptionPane.showMessageDialog(null, "Debe proveer los datos que se le estan preguntando", "Error", JOptionPane.ERROR_MESSAGE);
		}
		else 
		{
			if (this.interrupcionTrabajandose==null) //se esta creando una Interrupcio
			{
				int idInterrupcion = Integer.parseInt(this.txtCodInterrupcion.getText().trim());
				String desInterrupcion = this.txtDescrpInt.getText().trim().toUpperCase();
				this.interrupcionTrabajandose= new Interrupcion(idInterrupcion, desInterrupcion);
				this.accesoAMundo.agregarInterrupcion(this.interrupcionTrabajandose);
			}
			else //si ya existe
			{
				int idInterrupcion = Integer.parseInt(this.txtCodInterrupcion.getText().trim());
				String desInterrupcion = this.txtDescrpInt.getText().trim().toUpperCase();
				this.interrupcionTrabajandose.setIntId(idInterrupcion);
				this.interrupcionTrabajandose.setDescription(desInterrupcion);
			}
			
			this.referenciaAContenedor.cargarArbol();
			JOptionPane.showMessageDialog(null, "Interrupcion almacenada exitosamente", "Exito", JOptionPane.INFORMATION_MESSAGE);
		}
	}

	@Override
	@LogT(date = "2011-03-20", min = 3, taskId = 80)
	@Loc(size = 5, taskId = 80)
	public void actionPerformed(ActionEvent evento)
	{
		String comando = evento.getActionCommand();
		if (comando.equals(GUARDAR)) 
		{
			this.almacenar();
		}
		
	}
	
}
